<?php
class Cliente extends Persona {
    var $id_cliente="-1";#` varchar(30) NOT NULL,
    var $sucursal_origen="";#` varchar(30) NOT NULL,
    var $activo=1;#` tinyint(1) NOT NULL default '1',
    var $fecha_alta="";#` date NOT NULL,

    var $contacto_alterno=null;
    var $negocio=null;
    var $id_cliente_envio=0;

	/*sql q selecciona todos los productos*/
    var  $sql_defecto="SELECT c.*,concat( pn.nombres,' ', pn.apellidos ) as nombre,pn.nombres,pn.apellidos,ca.contacto,n.negocio
                      from clientes c
                      JOIN persona_nombres pn ON c.id_cliente = pn.id_propietario and pn.tabla='clientes'
                      LEFT JOIN clientes_contacto_alterno ca ON c.id_cliente = ca.id_cliente
                      LEFT JOIN clientes_negocios n ON c.id_cliente = n.id_cliente
                      LEFT JOIN direcciones d ON d.id_propietario= c.id_cliente and d.tabla='clientes'
                      LEFT JOIN telefonos t ON t.id_propietario= c.id_cliente and d.tabla='clientes'
                      WHERE c.activo=1
						";


    function __construct() {
        parent::__construct("clientes");
        $this->setFechaAlta(date("Y-m-d"));
        $this->contacto_alterno=new ContactoAlterno();
        $this->negocio=new Negocio();
        switch(func_num_args()) {
            case 1:	if(trim(func_get_arg(0)) =="")return;
                $this->setId( func_get_arg( 0 ) );
                $this->cargar();
                break;
        }
    }

	/*Utilitarias*/

    //agregar un usuario a la bd
    function insertar() {
        $id=($this->getId() != "-1")?$this->getId():'null';
        $con=new Conexion();
        #agregar al usuario
        $con->ejecutar("INSERT INTO clientes VALUES ('".$id."',
	'".$this->getSucursalOrigen()."','".$this->getFechaAlta()."','".$this->id_cliente_envio."',".$this->getActivo().")");

        if($id=='null') {
            $con->ejecutar("select max(id_cliente) from clientes");
            $this->setId($con->resultado(0,0));
        }
        #agregar a la persona
        $this->insertarPersona();

        $this->insertarComentarios();
    }
    
	/*
	 * Carga apartir de lainformacion  en la bd
	 */
    function cargar() {
    //si no existe
        if(!$this->existe()) {
            $this->setId("-1");
            return;//no cargar
        }

        //cargar a la persona
        $this->cargarPersona();
        $con=new Conexion();
        $r=$this->sql_defecto." and c.id_cliente='".$this->getId()."'";
        $con->ejecutar($r);

        $con->traerFilaPorNombre();

        $this->setSucursalOrigen($con->get("sucursal_origen"));
        $this->setFechaAlta($con->get("fecha_alta"));
        $this->setActivo($con->get("activo"));
        $this->id_cliente_envio=$con->get("envio");

        $this->setLlaves();

        $this->contacto_alterno->set($con->get("contacto"));
        $this->negocio->set($con->get("negocio"));
        
        $this->cargarComentarios();

    }
    function cargarComentarios() {
        $con=new Conexion();
        $con->ejecutar("select id_comentario from comentarios where id_propietario='".$this->getId()."' and tipo_propietario='clientes' ");

        while($con->traerFilaPorNombre())
            $this->comentarios[count($this->comentarios)]=new Comentario($con->get('id_comentario'));
    }

    #inserta sus comentarios si tiene
    function insertarComentarios(){
        for($i=0; $i<count($this->comentarios); $i++)
            new Comentario($this->getId(),$this->comentarios[$i]->getDescripcion(),$this->comentarios[$i]->getPublico(),"clientes");
    }

    function agregarComentario($co,$pu) {
        if(trim($co)!="") {
            $this->comentarios[count($this->comentarios)]=new Comentario($this->getId(),$co,$pu,"clientes");
        }
        return "{success:true}";
    }
    
    //checa si el usuario existen ya en la bd (el login almenos)
    function existe() {
        $con = new Conexion();
        $con->ejecutar("select * from clientes where id_cliente='".$this->getId()."'");
        #consultar si ya existe ese login asignado
        if(!$con->vacio())
        #si hay filas
            return true;
        return false;
    }

    function getMarcoHTML() {
        if(trim($this->telefono->toString())!="")
            $r='<div class="ud_ttdetalle"><img src="img/telefono.png" class="udfon"><div class="ud_tdetalle">'.trim($this->telefono->toString())."</div></div>";
        $e= '<div class="udmarco"><div class="ud_mdetalle"><div class="ud_ndetalle">'.$this->getNombre().'</div><div class="ud_ddetalle">'.$this->direccion->toString().'</div>'.$r.'</div></div>';
        return str_replace('"','\"',$e);
    }
    function getMarcoDireccionHTML() {
        $e= '<div class="udmarcodirecc">
                        <div class="ud_mdetalle">
                            <div class="ud_ndetalle">'.$this->getNombre().'</div>
                            <div class="ud_ddetalle">'.$this->direccion->toString().'</div>
                        </div>
                    </div>';
        return str_replace('"','\"',$e);
    }
    function getMarcoHTMLExt() {
        if(trim($this->telefono->toString())!="")
            $r='<div class="ud_ttdetalle">
					<img src="img/telefono.png" class="udfont">
					<div class="ud_tdetallet">'.$this->telefono->toString().'</div>
					<div style="clear:both;"></div>
				</div>';

        $e='<div class="udmarcot">
				<div class="ud_mdetallet">
					<div class="ud_ndetallet">'.$this->getNombre().'</div>
					<div class="ud_ddetallet">'.$this->direccion->toString().'</div>
				</div>
					'.$r.'
					<div style="clear:both;"></div>
			</div>';
        return ereg_replace('[[:space:]]+', ' ', trim(str_replace('"','\"',$e)));
    }
    function editarActivo($x) {
        if($x != $this->getActivo()) {
            $this->setActivo($x);
            new Conexion("UPDATE clientes SET activo=".$this->getActivo()." where id_cliente='".$this->getId()."'");
        }
    }
    //eliminar un usuario a la bd
    function eliminar() {
    //la llave primaria esta vacia
        if($this->vacio())
            return false;
        #eliminar al usuario
        $this->editarActivo(0);
        return "{success: true }";
    }

    function setLlaves() {
        $this->contacto_alterno->setId($this->getId());
        $this->negocio->setId($this->getId());
    }

    function toGrid() {
        $o = array(
            "id"=> $this->getId(),
            "datos"=> $this->getMarcoHTMLExt()//;//.", ".$this->getNombres(),
            //			"direccion"=> $this->direccion->toString(),
            //		"telefono"=> $this->telefono->toString(),
        );
        return $o;
    }

    function toObjeto() {
        $o = array(
            "id"=> $this->getId(),
            "txt_nombres"=> $this->getNombres(),
            "txt_apellidos"=> $this->getApellidos(),
            "txt_ciudad"=> $this->direccion->getCiudad(),
            "txt_colonia"=> $this->direccion->getColonia(),
            "txt_cp"=> $this->direccion->getCp(),
            "txt_dir"=> $this->direccion->getDireccion(),
            "txt_estado"=> $this->direccion->getEstado(),
            "txt_fax"=> $this->telefono->getTelefonoCel(),
            "txt_tel_casa"=> $this->telefono->getTelefonoCasa(),
            "txt_tel_trabajo"=> $this->telefono->getTelefonoTrabajo(),
            "sucursal_origen"=> $this->getSucursalOrigen(),
            "fecha_alta"=> $this->getFechaAlta(),
            "txt_ca"=> $this->contacto_alterno->get(),
            "txt_negocio"=> $this->negocio->get(),
            "txt_email"=> $this->email->get()
        );
        return $o;
    }

    function toVista() {
        $o = array(
            "id"=> $this->getId(),
            "txt_nombre"=> $this->getApellidos().", ".$this->getNombres(),
            "txt_direccion"=> $this->direccion->toString(),
            "txt_tels"=> $this->telefono->toString()
        );
        return $o;
    }

    function toJson() {
        if($this->getId()=="-1")//si el cliente no existe
            return false;

        return json_encode($this->toObjeto());
    }
    function toForm() {
        $obj=$this->toJson();
        if(!$obj) {
            return '{"success":false,"error":"El cliente no existe"}';
        }
        else {
			/*$o = array(
				"success"=>true,
				"data"=>$this->toObjeto()
			);*/
            return '{"success":true,"data":'.$obj.',"cargar":true}';
        }
    }


    function listarSelect($pagina=1,$aguja="") {

        $ob= json_decode( str_replace("\\\"", "\"",$aguja) );
        if(!isset($ob->txtId))
            $buscar=($aguja=="")?"":'{"nombres":"'.$aguja.'"}';
        else
            $buscar='{"txtId":"'.$ob->txtId.'"}';

        $query= $this->filtroSQL($buscar);#sql defecto


        $con=new Conexion();
        $con->ejecutar($query);
        $respuesta="{numFilas:".$con->numFilasResultado().",
				data: [";

        //echo $query." limit ".(($pagina-1)*PAGINA_CUANTOS).",".PAGINA_CUANTOS.";";exit;
        $con->ejecutar($query." limit ".(($pagina-1)*PAGINA_CUANTOS).",".PAGINA_CUANTOS.";");
        #le vamos concatenando a la respuesta cada opcion
        while($con->traerFilaPorNombre()) {
            $this->setId($con->get("id_cliente"));
            $this->cargar();
            $respuesta.= '{id:"'.$this->getId().'",nombre:"'.$this->getNombres().' '.$this->getApellidos().'",direccion:"'.$this->direccion->toString().'",telefono:"'.$this->telefono->toString().'"},';//,marco_html:"'.$this->getMarcoHTML().'"
        //$respuesta.="1_".$con->get("id_cliente");
        //			$respuesta.= '["'.$this->getId().'","'.$this->getNombres().' '.$this->getApellidos().'","'.$this->getMarcoHTML().'"],';
        }

        #si hay almenos una fila, nos queda una coma al final. Hay que quitarla
        if(!$con->vacio())
            $respuesta = substr($respuesta,0,strlen($respuesta)-1);

        $respuesta.= "]}";

        return $respuesta;
    }


    function agregar() {
        $this->setNombres(toHtml(trim($_POST['txt_nombres'])));
        $this->setApellidos(toHtml(trim($_POST['txt_apellidos'])));
        $this->setDireccion(toHtml(trim($_POST['txt_dir'])),toHtml(trim($_POST['txt_colonia'])),toHtml(trim($_POST['txt_ciudad'])),toHtml(trim($_POST['txt_estado'])),toHtml(trim($_POST['txt_cp'])));
        $this->setTelefono(trim($_POST['txt_tel_casa']),trim($_POST['txt_tel_trabajo']),trim($_POST['txt_fax']));

        $ss=new Session();
        $this->setSucursalOrigen($ss->sucursal->getId());


        #insertar para obtener id
        $this->insertar();
        $this->setLlaves();

        $this->contacto_alterno->editar(trim($_POST['txt_ca']));
        $this->negocio->editar(trim($_POST['txt_negocio']));
        //		$this->editarEmail(trim($_POST['txt_email']));

        return '{success: true,id:"'.$this->getId().'",nombre:"'.$this->getNombres()." ".$this->getApellidos().'",marco_html:"'.$this->getMarcoHTMLExt().'"}';
    }

    //editar un usuario a la bd
    function editar() {
        $this->editarNombres(toHtml($_POST['txt_nombres']));
        $this->editarApellidos(toHtml($_POST['txt_apellidos']));
        $this->editarDireccion(toHtml($_POST['txt_dir']),toHtml($_POST['txt_colonia']),toHtml($_POST['txt_ciudad']),toHtml($_POST['txt_estado']),toHtml($_POST['txt_cp']));
        $this->editarTelefono($_POST['txt_tel_casa'],$_POST['txt_tel_trabajo'],$_POST['txt_fax']);

        $this->setLlaves();

        $this->contacto_alterno->editar(trim($_POST['txt_ca']));
        $this->negocio->editar(trim($_POST['txt_negocio']));
        //		$this->editarEmail(trim($_POST['txt_email']));

        return '{success: true,id:"'.$this->getId().'",nombre:"'.$this->getNombres()." ".$this->getApellidos().'",marco_html:"'.$this->getMarcoHTMLExt().'"}';
    }


    function listarGrid($pagina,$query) {
        $con=new Conexion();
        $con->ejecutar($query);
        $respuesta=array("numFilas"=>$con->numFilasResultado());
        $con->ejecutar($query." limit ".(($pagina-1)*PAGINA_CUANTOS).",".PAGINA_CUANTOS.";");

        /*$arr_user=array();
		#le vamos concatenando a la respuesta cada opcion
		while($fila=$con->traerFilaPorNombre()) {
            array_push($arr_user,$fila);
            //print_r($fila);
			//$this->setId($con->get("login"));
			//$this->cargar();
			//$respuesta["data"][count($respuesta["data"])]= $this->toGrid();
			#echo $this->conexion->get("login")." - ";
	    }
        $respuesta["success"]= true;
        $respuesta["data"]= $arr_user;*/

        while($con->traerFilaPorNombre()) {
            $this->setId($con->get("id_cliente"));
            $this->cargar();
            $respuesta["data"][count($respuesta["data"])]= $this->toGrid();#esto es como un push($this->toGrid())
        }

        #imprimir el resultado
        return str_replace("\\\\\\", "\\", json_encode($respuesta));
    }
    function listar($pagina,$parametros) {
        $sql=$this->filtroSQL($parametros);
        return $this->listarGrid($pagina,$sql);
    }
    function filtroSQL($p) {
        if(trim($p)=="")
        //hacer la consulta sin condiciones
            return $this->sql_defecto." and c.envio=0 order by pn.apellidos";

        $p=json_decode( fromURL($p) );
        $query= $this->sql_defecto." and c.envio=0 ";

        if(isset($p->txtId))
        //si nombre tiene algo
            $query.= " and c.id_cliente='".$p->txtId."' ";

        if(isset($p->nombres))
            $query.= " and concat( pn.nombres,' ', pn.apellidos ) like '%".$p->nombres."%'";//".Persona::buscarNombre($p->nombres)." ";

        $query.=" order by pn.apellidos";
        //hacer la consulta
        return ereg_replace('[[:space:]]+', ' ', trim($query));
    }



	/*funciones SET y GET*/

    function setId($_x) {$this->id_cliente=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : $_x;}
    function setSucursalOrigen($_x) {$this->sucursal_origen=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : $_x;	}
    function setFechaAlta($_x) {$this->fecha_alta=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : $_x;}
    function setActivo($_x) {$this->activo=(!$_x || trim($_x)=="" || $_x=="null" || $_x==null) ?"0" : "1";}
    function setContactoAlterno($_x) {$this->tarifa=(trim($_x)=="" || $_x=="null" || $_x==null) ?"" : trim($_x);}

    function getId() {return $this->id_cliente;}
    function getSucursalOrigen() {return $this->sucursal_origen;}
    function getFechaAlta() {return $this->fecha_alta;}
    function getActivo() {return $this->activo;}
    function getContactoAlterno() {return $this->tarifa;}



	/*Funcion es de EDITAR*/
    function editarSucursalOrigen($x) {
        if($x != $this->getSucursalOrigen()) {
            $this->setSucursalOrigen($x);
            new Conexion("UPDATE clientes SET sucursal_origen='".$this->getSucursalOrigen()."' where id_cliente='".$this->getId()."'");
        }
    }
}
?>
